package com.oha.laporrayelchurro.service;

import java.util.ArrayList;
import java.util.List;

import com.oha.laporrayelchurro.commons.Constantes;
import com.oha.laporrayelchurro.model.Partido;
import com.oha.laporrayelchurro.model.Porra;

/**
 * 
 * @author oscarha
 *
 */
public class DataService {
	
	/**
	 * pais Service
	 */
	private PartidoService pService = new PartidoService();

	/**
	 * reultados
	 * @return
	 */
	public Porra getPorra(Long iniPartido){
		Porra porra = new Porra();
		porra.setUsuarios(getUsers());
		long partidoN = 1;
		if(iniPartido!=null){
			partidoN = iniPartido;
		}else{
			List<Partido> pList = pService.getPorras();
			if(pList!=null && pList.size()>0){
				partidoN = pList.get(0).getTipo();
				partidoN++;
			}
		}
		porra.setPorrasList(getPronosticoList(partidoN));
		porra.setMasterList(getMasterList(partidoN));
		return porra;
	}
	

	/**
	 * 
	 * @return
	 */
	private List<Partido> getMasterList(long partidoN){
		String usr = null;
		String pronostico = Constantes.MASTER_LIST;
		List<Partido> masterList = getPronostico(usr, pronostico, partidoN);
		return masterList;
	}
	
	/**
	 * 
	 * @return
	 */
	private List<List<Partido>> getPronosticoList(long partidoN){
		List<List<Partido>> dataList = new ArrayList<List<Partido>>();
		String[] porraList = new String[]{
				Constantes.ALBERTO_PORRA, Constantes.MARIO_PORRA, Constantes.JAVI_PORRA, 
				Constantes.JC_PORRA     , Constantes.PERI_PORRA , Constantes.DAVIDB_PORRA,
				Constantes.OSCAR_PORRA  , Constantes.SESE_PORRA , Constantes.MANU_PORRA};
		for(int i = 0; i<getUsers().length; i++){
			String pronostico = porraList[i];
			String usr = getUsers()[i];
			List<Partido> pList = getPronostico(usr, pronostico, partidoN);
			dataList.add(pList);
		}
		return dataList;
	}
	
	/**
	 * 
	 * @param usr
	 * @param pronostico
	 * @param desdeN
	 * @return
	 */
	private List<Partido> getPronostico(String usr, String pronostico, long desdeN){
		List<Partido> dataList = new ArrayList<Partido>();
		Long tipo = 1L;
		String[] pStr = pronostico.split("#");
		for(String info:pStr){
			if(tipo>=desdeN){
				Partido p = strToPartido(info, usr, tipo);
				dataList.add(p);
			}
			tipo++;
		}
		return dataList;
	}
	
	/**
	 * 
	 * @param partido
	 * @param tipo
	 * @return
	 */
	private Partido strToPartido(String partido, String usuario, long tipo){
		String[] partidoStr = partido.split(";");
		Partido p = new Partido();
		p.setIdPartido(new Integer(partidoStr[0]));
		p.setUsuario(usuario);
		p.setTipo(tipo);
		p.setPais1(partidoStr[2]);
		p.setGoles1(new Long(partidoStr[3]));
		p.setPais2(partidoStr[4]);
		p.setGoles2(new Long(partidoStr[5]));
		return p;
	}
	
	/**
	 * 
	 * @return
	 */
	private String[] getUsers(){
		return new String[]{
				"Alberto", "Mario", "Javi",
				"JC"     , "Peri" , "DavidB",
				"Oscar"  , "Sese" , "Manu"
		};
	}
	
}
